// 《围棋》作者版权所有。保留所有权利。
// 此源代码的使用受BSD样式
// 许可证的约束，该许可证可以在许可证文件中找到。

package strconv

// 该文件实现了Eisel Lemire ParseFloat算法，发表在
// 2020上，并在
// https:
// 
// 此Go重新实现与
// 
// 附加测试（在数百万个测试字符串上）由
// https:

import (
	"math"
	"math/bits"
)

func eiselLemire64(man uint64, exp10 int, neg bool) (f float64, ok bool) {
	// 此函数体中的简短注释指的是
	// https:

	// Exp10范围的部分。
	if man == 0 {
		if neg {
			f = math.Float64frombits(0x8000000000000000) // 负零。
		}
		return f, true
	}
	if exp10 < detailedPowersOfTenMinExp10 || detailedPowersOfTenMaxExp10 < exp10 {
		return 0, false
	}

	// 正常化。
	clz := bits.LeadingZeros64(man)
	man <<= uint(clz)
	const float64ExponentBias = 1023
	retExp2 := uint64(217706*exp10>>16+64+float64ExponentBias) - uint64(clz)

	// 乘法。
	xHi, xLo := bits.Mul64(man, detailedPowersOfTen[exp10-detailedPowersOfTenMinExp10][1])

	// 更广泛的近似值。
	if xHi&0x1FF == 0x1FF && xLo+man < man {
		yHi, yLo := bits.Mul64(man, detailedPowersOfTen[exp10-detailedPowersOfTenMinExp10][0])
		mergedHi, mergedLo := xHi, xLo+yHi
		if mergedLo < xLo {
			mergedHi++
		}
		if mergedHi&0x1FF == 0x1FF && mergedLo+1 == 0 && yLo+man < man {
			return 0, false
		}
		xHi, xLo = mergedHi, mergedLo
	}

	// 移位到54位。
	msb := xHi >> 63
	retMantissa := xHi >> (msb + 9)
	retExp2 -= 1 ^ msb

	// 半路模糊。
	if xLo == 0 && xHi&0x1FF == 0 && retMantissa&3 == 1 {
		return 0, false
	}

	// 从54位到53位。
	retMantissa += retMantissa & 1
	retMantissa >>= 1
	if retMantissa>>53 > 0 {
		retMantissa >>= 1
		retExp2 += 1
	}
	// retExp2是一个uint64。零或下溢意味着我们处于低于正常的
	// 64空间。0x7FF或以上表示我们在Inf/64空间。
	// 
	// if块相当于（但分支数少于）：
	// if retExp2<=0 | | | retExp2>=0x7FF{etc}
	if retExp2-1 >= 0x7FF-1 {
		return 0, false
	}
	retBits := retExp2<<52 | retMantissa&0x000FFFFFFFFFFFFF
	if neg {
		retBits |= 0x8000000000000000
	}
	return math.Float64frombits(retBits), true
}

func eiselLemire32(man uint64, exp10 int, neg bool) (f float32, ok bool) {
	// 此函数体中的简短注释参考
	// https:
	// 
	// （11个指数位带有
	// /-1023偏差，52个尾数位），但同样的方法
	// 适用于float32风格（8个指数位带有-127偏差，23个
	// 尾数位）。这里的计算使用64位值（例如
	// man、xHi、retMantissa）进行，最后转换为32位浮点。

	// Exp10范围。
	if man == 0 {
		if neg {
			f = math.Float32frombits(0x80000000) // 负零。
		}
		return f, true
	}
	if exp10 < detailedPowersOfTenMinExp10 || detailedPowersOfTenMaxExp10 < exp10 {
		return 0, false
	}

	// 正常化。
	clz := bits.LeadingZeros64(man)
	man <<= uint(clz)
	const float32ExponentBias = 127
	retExp2 := uint64(217706*exp10>>16+64+float32ExponentBias) - uint64(clz)

	// 乘法。
	xHi, xLo := bits.Mul64(man, detailedPowersOfTen[exp10-detailedPowersOfTenMinExp10][1])

	// 更广泛的近似值。dui xiao dui xiao fang
	if xHi&0x3FFFFFFFFF == 0x3FFFFFFFFF && xLo+man < man {
		yHi, yLo := bits.Mul64(man, detailedPowersOfTen[exp10-detailedPowersOfTenMinExp10][0])
		mergedHi, mergedLo := xHi, xLo+yHi
		if mergedLo < xLo {
			mergedHi++
		}
		if mergedHi&0x3FFFFFFFFF == 0x3FFFFFFFFF && mergedLo+1 == 0 && yLo+man < man {
			return 0, false
		}
		xHi, xLo = mergedHi, mergedLo
	}

	msb := xHi >> 63
	retMantissa := xHi >> (msb + 38)
	retExp2 -= 1 ^ msb

	// 半路模糊。
	if xLo == 0 && xHi&0x3FFFFFFFFF == 0 && retMantissa&3 == 1 {
		return 0, false
	}

	// 从54位到53位（对于float32，从25位到24位）。
	retMantissa += retMantissa & 1
	retMantissa >>= 1
	if retMantissa>>24 > 0 {
		retMantissa >>= 1
		retExp2 += 1
	}
	// retExp2是一个uint64。零或下溢意味着我们处于低于正常的
	// 32空间。0xFF或以上表示我们在Inf/32空间。
	// 
	// if块相当于（但分支数少于）：
	// if-retExp2<=0 | | | retExp2>=0xFF{etc}
	if retExp2-1 >= 0xFF-1 {
		return 0, false
	}
	retBits := retExp2<<23 | retMantissa&0x007FFFFF
	if neg {
		retBits |= 0x80000000
	}
	return math.Float32frombits(uint32(retBits)), true
}

// detailedPowerStory{Min，Max}Exp10是detailedPowerStory的第一行和最后一行所代表的10的幂。这两个界限都包含在内。
const (
	detailedPowersOfTenMinExp10 = -348
	detailedPowersOfTenMaxExp10 = +347
)

// detailed powers通常包含128位尾数近似值（向下舍入）
// 到10的幂。例如：
// 
// -1e43≈ （0xE596B7B0_C643C719*（2**79））
// /-1e43=（0xE596B7B0_C643C719_6D9CCD05_D0000000*（2**15））
// 
// 尾数已明确列出。指数由斜率为217706.0/65536.0的线性
// 表达式表示≈ 日志（10）/日志（2）。
// 
// 该表由
// github.com/google/wuffs/blob/ba3818cb6b473a2ed0b38ecfc07dbbd3a97e8ae7/script/print-mpb-powers-of-10.go10月7日的
var detailedPowersOfTen = [...][2]uint64{
	{0xFE30F0F5E50E20F7, 0x8E6D8C6AB0787F72}, // 3.5级
	{0xBDBD2D335E51A935, 0xB208EF855C969F4F}, // 
	{0x8920B098955522B4, 0xFD00B897478238D0}, // 1e-320 
	{0xEB2189F734AA831D, 0xC5A890362FDDBC62}, // 
	{0x77B191618C54E9AC, 0x9FAACF3DF73609B1}, // 
	{0x4B0573286B44AD1D, 0xF97AE3D0D2446F25}, // 
	{0x4B0573286B44AD1D, 0xF97AE3D0D2446F25}, // 
	{0x4B0573286B44AD1D, 0xF97AE3D0D2446F25}, // 
	{0x16C90C8F323F516C, 0xE2E69915B3FFF9F9}, // 
	{0x99CD11CFDF41779C, 0xB1442798F49FFB4A}, // 1-276年的
	{0x0BFACD89EC191EC9, 0x92A1958A7675175F}, // 1-251级
	{0xCEF980EC671F667B, 0xB749FAED14125D36}, // ：：
	{0x82B7E12780E7401A, 0xE51C79A85916F484}, // 10-249级
	{0xD1B2ECB8B0908810, 0x8F31CC0937AE58D2}, // 1-248级
	{0x861FA7E6DCB4AA15, 0xB2FE3F0B8599EF07}, // ：
	{0x861FA7E6DCB4AA15, 0xB2FE3F0B8599EF07}, // 10-1-1-251级
	{0xD45D35E6AE3D4DA0, 0x9580869F0E7AAC0E}, // 1e-195 
	{0x8974836059CCA109, 0xBAE0A846D2195712}, // 1e-194 
	{0x2BD1A438703FC94B, 0xE998D258869FACD7}, // 1e-193 
	{0x7B6306A34627DDCF, 0x91FF83775423CC06}, // 1e-192 
	{0x1A3BC84C17B1D542, 0xB67F6455292CBF08}, // 1e-191 
	{0x9624AB50B148D445, 0xAE0B158B4738705E}, // 1e-185 
	{0x3BADD624DD9B0957, 0xD98DDAEE19068C76}, // 1e-184 
	{0xE54CA5D70A80E5D6, 0x87F8A8D4CFA417C9}, // 1e-183第三次CDCDEFG
	{0xDC44E6C3CB279AC1, 0xF18899B1BC3F8CA1}, // 8
	{0x7415D448F6B6F0E7, 0xBCB2B812DB11A5DE}, // 7
	{0x111B495B3464AD21, 0xEBDF661791D60F56}, // 1-1-1级（1）级（1-169级）级（1-169级）
	{0x066EA92F3F326564, 0xAB9EB47C81F5114F}, // 1e-154 
	{0xC80A537B0EFEFEBD, 0xD686619BA27255A2}, // 1e-153 
	{0xBD06742CE95F5F36, 0x8613FD0145877585}, // 1e-152 
	{0x2C48113823B73704, 0xA798FC4196E952E7}, // 1e-151 
	{0xF75A15862CA504C5, 0xD17F3B51FCA3A7A0}, // 1e-150 
	{0x9A984D73DBE722FB, 0x82EF85133DE648C4}, // 1e 1e 149 
	{0xC13E60D0D2E0EBBA, 0xA3AB66580D5FDAF5}, // 1e 148 
	{0x318DF905079926A8, 0xCC963FEE10B7D1B3}, // 1e 147 
	{0xFDF17746497F7052, 0xFFBBCFE994E5C61F}, // 1e-146 
	{0xFEB6EA8BEDEFA633, 0x9FD561F1FD0F9BD3}, // 1e-145 
	{0xFE64A52EE96B8FC0, 0xC7CABA6E7C5382C8}, // 1e-144 
	{0x3DFDCE7AA3C673B0, 0xF9BD690A1B68637B}, // 1e-143 
	{0x06BEA10CA65C084E, 0x9C1661A651213E2D}, // 1e-142 
	{0x486E494FCFF30A62, 0xC31BFA0FE5698DB8}, // 1e-141 
	{0x5A89DBA3C3EFCCFA, 0xF3E2F893DEC3F126}, // 1e 1e 140 
	{0xF89629465A75E01C, 0x986DDB5C6B3A76B7}, // 1e 139 
	{0xF6BBB397F1135823, 0xBE89523386091465}, // 1e 1e 138 
	{0x746AA07DED582E2C, 0xEE2BA6C0678B597F}, // 1e 1e 138 
	{0x0806357D5A3F525F, 0x811CCC668829B887}, // /1e-118 
	{0xCA07C2DCB0CF26F7, 0xA163FF802A3426A8}, // /1e-117 
	{0xFC89B393DD02F0B5, 0xC9BCFF6034C13052}, // /1e-116 
	{0xBBAC2078D443ACE2, 0xFC2C3F3841F17C67}, // /1e-115 
	{0xD54B944B84AA4C0D, 0x9D9BA7832936EDC0}, // /1e-114 
	{0x4D4617B5FF4A16D5, 0xF64335BCF065D37D}, // /1e-112 
	{0xE45EC2862F71E1D6, 0xC06481FB9BCF8D39}, // /1e-110 
	{0x5D767327BB4E5A4C, 0xF07DA27A82C37088}, // /1e-109 
	{0xB1C6F22B5E6F48C2, 0x90BD77F3483BB9B9}, // 4.2
	{0xD3C36113404EA4A8, 0xD1B71758E219652B}, // 2级3级
	{0xD3C36113404EA4A8, 0xD1B71758E219652B}, // 1级4级
	{0x0000000000000000, 0xEE6B280000000000}, // /1e9 
	{0x0000000000000000, 0x9502F90000000000}, // /1e10 
	{0x0000000000000000, 0xBA43B74000000000}, // /1e11 
	{0x0000000000000000, 0xE8D4A51000000000}, // /1e12 
	{0x0000000000000000, 0x9184E72A00000000}, // /1e13 
	{0x0000000000000000, 0xB5E620F480000000}, // /1e14 
	{0x0000000000000000, 0xE35FA931A0000000}, // /1e15 
	{0x0000000000000000, 0x8E1BC9BF04000000}, // /1e16 
	{0x0000000000000000, 0xDE0B6B3A76400000}, // /1e18 
	{0x0000000000000000, 0xA968163F0A57B400}, // 1e23 
	{0x0000000000000000, 0xD3C21BCECCEDA100}, // 1e24 
	{0x0000000000000000, 0x84595161401484A0}, // 1e25 
	{0x0000000000000000, 0xA56FA5B99019A5C8}, // 1e26 
	{0x0000000000000000, 0xCECB8F27F4200F3A}, // 1e27 
	{0x6C28000000000000, 0xC5371912364CE305}, // 1e33 
	{0xC732000000000000, 0xF684DF56C3E01BC6}, // 1e34 
	{0x3C7F400000000000, 0x9A130B963A6C115C}, // 1e35 
	{0x4B9F100000000000, 0xC097CE7BC90715B3}, // 1e36 
	{0x1E86D40000000000, 0xF0BDC21ABB48DB20}, // 1e37 
	{0x1314448000000000, 0x96769950B50D88F4}, // 1e38 
	{0x17D955A000000000, 0xBC143FA4E250EB31}, // 1e39 
	{0x5DCFAB0800000000, 0xEB194F8E1AE525FD}, // 40 
	{0x5AA1CAE500000000, 0x92EFD1B8D0CF37BE}, // 1e41 
	{0xF14A3D9E40000000, 0xB7ABC627050305AD}, // 1e42 
	{0x6D9CCD05D0000000, 0xE596B7B0C643C719}, // 43 
	{0x9670B12B7F410000, 0xAF298D050E4395D6}, // /1e48 
	{0xA5880A69FB6AC800, 0x88D8762BF324CD0F}, // /1e50 
	{0x63CC55F49F88EB2F, 0x9B934C3B330C8577}, // /1e63 
	{0x3CBF6B71C76B25FB, 0xC2781F49FFCFA6D5}, // /1e64 
	{0x8BEF464E3945EF7A, 0xF316271C7FC3908A}, // /1e65 
	{0x97758BF0E3CBB5AC, 0x97EDD871CFDA3A56}, // /1e66 
	{0x3D52EEED1CBEA317, 0xBDE94E8E43D0C8EC}, // /1e67 
	{0x4CA7AAA863EE4BDD, 0xED63A231D4C4FB27}, // /1e68 
	{0x6E3569326C784337, 0x8A2DBF142DFCC7AB}, // 1e78 
	{0x49C2C37F07965404, 0xACB92ED9397BF996}, // 1e79 
	{0xDC33745EC97BE906, 0xD7E77A8F87DAF7FB}, // 1e80 
	{0x69A028BB3DED71A3, 0x86F0AC99B4E8DAFD}, // 1e81 
	{0xC40832EA0D68CE0C, 0xA8ACD7C0222311BC}, // 1e82 
	{0xF50A3FA490C30190, 0xD2D80DB02AABD62B}, // 1e83 
	{0x792667C6DA79E0FA, 0x83C7088E1AAB65DB}, // 1e84 
	{0x577001B891185938, 0xA4B8CAB1A1563F52}, // 1e85 
	{0xED4C0226B55E6F86, 0xCDE6FD5E09ABCF26}, // 1e86 
	{0x544F8158315B05B4, 0x80B05E5AC60B6178}, // 1e87 
	{0x3BA5D0BD324F8394, 0xC45D1DF942711D9A}, // /1e92 
	{0xCA8F44EC7EE36479, 0xF5746577930D6500}, // /1e93 
	{0x7E998B13CF4E1ECB, 0x9968BF6ABBE85F20}, // /1e94 
	{0x9E3FEDD8C321A67E, 0xBFC2EF456AE276E8}, // /1e95 
	{0xC5CFE94EF3EA101E, 0xEFB3AB16C59B14A2}, // /1e96 
	{0xBBA1F1D158724A12, 0x95D04AEE3B80ECE5}, // /1e97 
	{0xECD8590680A3AA11, 0xAE67F1E9AEC07187}, // /1e107 
	{0xE80E6F4820CC9495, 0xDA01EE641A708DE9}, // /1e108 
	{0x3109058D147FDCDD, 0x884134FE908658B2}, // /1e109 
	{0xBD4B46F0599FD415, 0xAA51823E34A7EEDE}, // /1e110 
	{0x6C9E18AC7007C91A, 0xD4E5E2CDC1D1EA96}, // /1e111 
	{0x03E2CF6BC604DDB0, 0x850FADC09923329E}, // /1e112 
	{0x84DB8346B786151C, 0xA6539930BF6BFF45}, // /1e113 
	{0xE612641865679A63, 0xCFE87F7CEF46FF16}, // /1e114 
	{0x4FCB7E8F3F60C07E, 0x81F14FAE158C5F6E}, // /1e115 
	{0x1F225A7CA91A4226, 0xF7D88BC24209A565}, // /1e121 
	{0x3375788DE9B06958, 0x9AE757596946075F}, // /1e122 
	{0x0052D6B1641C83AE, 0xC1A12D2FC3978937}, // /1e123 
	{0xC0678C5DBD23A49A, 0xF209787BB47D6B84}, // /1e124 
	{0xF840B7BA963646E0, 0x9745EB4D50CE6332}, // /1e125 
	{0xB650E5A93BC3D898, 0xBD176620A501FBFF}, // /1e126 
	{0xA3E51F138AB4CEBE, 0xEC5D3FA8CE427AFF}, // /1e127 
	{0xC66F336C36B10137, 0x93BA47C980E98CDF}, // /1e128 
	{0xA60DC059157491E5, 0xE6D3102AD96CEC1D}, // /1e130 
	{0x5EC05DCFF72E7F8F, 0xB01AE745B101E9E4}, // /1e135 
	{0x76707543F4FA1F73, 0xDC21A1171D42645D}, // /1e136 
	{0x6A06494A791C53A8, 0x899504AE72497EBA}, // /1e137 
	{0x0487DB9D17636892, 0xABFA45DA0EDBDE69}, // /1e138 
	{0x45A9D2845D3C42B6, 0xD6F8D7509292D603}, // /1e139 
	{0x0B8A2392BA45A9B2, 0x865B86925B9BC5C2}, // /1e140 
	{0x8E6CAC7768D7141E, 0xA7F26836F282B732}, // /1e141 
	{0x3207D795430CD926, 0xD1EF0244AF2364FF}, // /1e142 
	{0x36DBA887C37A8C0F, 0xCD036837130890A1}, // /145 
	{0xCB772339BA1F17F9, 0xFA42A8B73ABBF48C}, // 1e149 
	{0xFF2A760414536EFB, 0x9C69A97284B578D7}, // 1e150 
	{0xFEF5138519684ABA, 0xC38413CF25E2D70D}, // 1e151 
	{0x7EB258665FC25D69, 0xF46518C2EF5B8CD1}, // 1e152 
	{0xEF2F773FFBD97A61, 0x98BF2F79D5993802}, // 1e153 
	{0xAAFB550FFACFD8FA, 0xBEEEFB584AFF8603}, // 1e154 
	{0x95BA2A53F983CF38, 0xEEAABA2E5DBF6784}, // 1e155 
	{0xDD945A747BF26183, 0x952AB45CFA97A0B2}, // 1e156 
	{0x7A37CD5601AAB85D, 0xE912B9D1478CEB17}, // 158 
	{0xAC62E055C10AB33A, 0x91ABB422CCB812EE}, // 159
	{0x596EB2D8AE258FC8, 0xB1D219647AE6B31C}, // 1e163 
	{0x6FCA5F8ED9AEF3BB, 0xDE469FBD99A05FE3}, // 1e164 
	{0x25DE7BB9480D5854, 0x8AEC23D680043BEE}, // 1e165 
	{0xAF561AA79A10AE6A, 0xADA72CCC20054AE9}, // 1e166 
	{0x1B2BA1518094DA04, 0xD910F7FF28069DA4}, // 1e167 
	{0x90FB44D2F05D0842, 0x87AA9AFF79042286}, // 1e168 
	{0x353A1607AC744A53, 0xA99541BF57452B28}, // 1e169 
	{0x42889B8997915CE8, 0xD3FA922F2D1675F2}, // 1e170 
	{0x69956135FEBADA11, 0x847C9B5D7C2E09B7}, // 1e171 
	{0x43FAB9837E699095, 0xA59BC234DB398C25}, // 1e172 
	{0x94F967E45E03F4BB, 0xCF02B2C21207EF2E}, // 173 
	{0x5CDA735244C3D43E, 0xFCB2CB35E702AF78}, // 1e177 
	{0x3A0888136AFA64A7, 0x9DEFBF01B061ADAB}, // 1e178 
	{0x088AAA1845B8FDD0, 0xC56BAEC21C7A1916}, // 1e179 
	{0x8AAD549E57273D45, 0xF6C69A72A3989F5B}, // 1e180 
	{0x36AC54E2F678864B, 0x9A3C2087A63F6399}, // 1e181 
	{0x656D44A2A11C51D5, 0xF0FDF2D3F3C30B9F}, // 1e183 
	{0x37C981DCC395A9AC, 0xB38D92D760EC4455}, // /1e191 
	{0x85BBE253F47B1417, 0xE070F78D3927556A}, // /1e192 
	{0x93956D7478CCEC8E, 0x8C469AB843B89562}, // /1e193 
	{0x387AC8D1970027B2, 0xAF58416654A6BABB}, // /1e194 
	{0x06997B05FCC0319E, 0xDB2E51BFE9D0696A}, // /1e195 
	{0x31EC038DF7B441F4, 0xCC20CE9BD35C78A5}, // 1e204 
	{0x7E67047175A15271, 0xFF290242C83396CE}, // 1e205 
	{0x0F0062C6E984D386, 0x9F79A169BD203E41}, // 1e206 
	{0x52C07B78A3E60868, 0xC75809C42C684DD1}, // 1e207 
	{0xA7709A56CCDF8A82, 0xF92E0C3537826145}, // 1e208 
	{0x88A66076400BB691, 0x9BBCC7A142B17CCB}, // 1e209 
	{0x6ACFF893D00EA435, 0xC2ABF989935DDBFE}, // 1e210 
	{0x0583F6B8C4124D43, 0xF356F7EBF83552FE}, // 1e211 
	{0xC3727A337A8B704A, 0x98165AF37B2153DE}, // 1e212 
	{0x744F18C0592E4C5C, 0xBE1BF1B059E9A8D6}, // 1e213 
	{0x1162DEF06F79DF73, 0xEDA2EE1C7064130C}, // /1e214 
	{0x8ADDCB5645AC2BA8, 0x9485D4D1C63E8BE7}, // /1e215 
	{0x6D953E2BD7173692, 0xB9A74A0637CE2EE1}, // /1e216 
	{0xC8FA8DB6CCDD0437, 0xE8111C87C5C1BA99}, // /1e217 
	{0x1D9C9892400A22A2, 0x910AB1D4DB9914A0}, // /1e218 
	{0x2503BEB6D00CAB4B, 0xB54D5E4A127F59C8}, // /1e219 
	{0x2E44AE64840FD61D, 0xE2A0B5DC971F303A}, // /1e220 
	{0x7425A83E872C5F47, 0xB10D8E1456105DAD}, // /1e222 
	{0xD12F124E28F77719, 0xDD50F1996B947518}, // /1e223 
	{0x82BD6B70D99AAA6F, 0x8A5296FFE33CC92F}, // /1e224 
	{0x1EDE48111209A050, 0xD31045A8341CA07C}, // 1e229 
	{0x934AED0AAB460432, 0x83EA2B892091E44D}, // 1e230 
	{0xF81DA84D5617853F, 0xA4E4B66B68B65D60}, // 1e231 
	{0x36251260AB9D668E, 0xCE1DE40642E3F4B9}, // 1e232 
	{0xC1D72B7C6B426019, 0x80D2AE83E9CE78F3}, // 1e233 
	{0x4ABDAF101564F98E, 0x95F83D0A1FB69CD9}, // /1e243 
	{0x9D6D1AD41ABE37F1, 0xBB764C4CA7A4440F}, // /1e244 
	{0x84C86189216DC5ED, 0xEA53DF5FD18D5513}, // /1e245 
	{0x32FD3CF5B4E49BB4, 0x92746B9BE2F8552C}, // /1e246 
	{0x3FBC8C33221DC2A1, 0xB7118682DBB66A77}, // /1e247 
	{0x552A74227F3EA565, 0xD51EA6FA85785631}, // 1e257 
	{0xD53A88958F87275F, 0x8533285C936B35DE}, // 1e258 
	{0x8A892ABAF368F137, 0xA67FF273B8460356}, // 1e259 
	{0x2D2B7569B0432D85, 0xD01FEF10A657842C}, // 1e260 
	{0x9C3B29620E29FC73, 0x8213F56A67F6B29B}, // 1e261 
	{0xED238CD383AA0110, 0xFE0EFB53D30DD4D7}, // 1e264 
	{0xB143C6053EDCD0D5, 0xC67BB4597CE2CE48}, // 266 
	{0xD5BE0503E085D813, 0x976E41088617CA01}, // 1e271 
	{0x4B2D8644D8A74E18, 0xBD49D14AA79DBC82}, // 1e272 
	{0xDDF8E7D60ED1219E, 0xEC9C459D51852BA2}, // 1e273 
	{0xCABB90E5C942B503, 0x93E1AB8252F33B45}, // 1e274 
	{0x3D6A751F3B936243, 0xB8DA1662E7B00A17}, // 1e275 
	{0x27FB2B80668B24C5, 0x906A617D450187E2}, // 1e277 
	{0xA97C177947AD4095, 0xD732290FBACAF133}, // 1e285 
	{0x49ED8EABCCCC485D, 0x867F59A9D4BED6C0}, // 1e286 
	{0x5C68F256BFFF5A74, 0xA81F301449EE8C70}, // 1e287 
	{0x73832EEC6FFF3111, 0xD226FC195C6A2F8C}, // 1e288 
	{0xC831FD53C5FF7EAB, 0x83585D8FD9C25DB7}, // 1e289 
	{0xBA3E7CA8B77F5E55, 0xA42E74F3D032F525}, // 1e290 
	{0x28CE1BD2E55F35EB, 0xCD3A1230C43FB26F}, // 1e291 
	{0xD7E105BCC332621F, 0xA0555E361951C366}, // 1e293 
	{0x8038D51CB897789C, 0x98E7E9CCCFBD7DBD}, // /1e299 
	{0xE0470A63E6BD56C3, 0xBF21E44003ACDD2C}, // /1e300 
	{0x1858CCFCE06CAC74, 0xEEEA5D5004981478}, // /1e301 
	{0x0F37801E0C43EBC8, 0x95527A5202DF0CCB}, // /1e302 
	{0xD30560258F54E6BA, 0xBAA718E68396CFFD}, // /1e303 
	{0x18375281AE7822BC, 0xD94AD8B1C7380874}, // 1e313 
	{0x8F2293910D0B15B5, 0x87CEC76F1C830548}, // 1e314 
	{0xB2EB3875504DDB22, 0xA9C2794AE3A3C69A}, // 1e315 
	{0x5FA60692A46151EB, 0xD433179D9C8CB841}, // 1e316 
	{0xDBC7C41BA6BCD333, 0x849FEEC281D7F328}, // 1e317 
	{0x12B9B522906C0800, 0xA5C7EA73224DEFF3}, // 1e318 
	{0xE6A1158300D46640, 0x81842F29F2CCE375}, // 1e320 
	{0x60495AE3C1097FD0, 0xA1E53AF46F801C53}, // 321 
	{0x385BB19CB14BDFC4, 0xCA5E89B18B602368}, // 1e322 
	{0x46729E03DD9ED7B5, 0xFCF62C1DEE382C42}, // 
	{0x737F74F1DC043328, 0x9A65406D44A5C903}, // /1e327 
	{0x505F522E53053FF2, 0xC0FE908895CF3B44}, // /1e328 
	{0x647726B9E7C68FEF, 0xF13E34AABB430A15}, // /1e329 
	{0xB67D16413D132072, 0xBC789925624C5FE0}, // /1e331 
	{0xA67398DB9F6820E1, 0xDB68C2CA82ED2A05}, // 1e341 
	{0x88083F8943A1148C, 0x892179BE91D43A43}, // 1e342 
	{0x6A0A4F6B948959B0, 0xAB69D82E364948D4}, // 1e343 
	{0x848CE34679ABB01C, 0xD6444E39C3DB9B09}, // 1e344 
	{0xF2D80E0C0C0B4E11, 0x85EAB0E41A6940E5}, // 1e345 
	{0x4B7195F2D2D1A9FB, 0xD13EB46469447567}, // 1e347 
}
